const axios = require('axios')

axios.defaults.baseURL = process.env.API_SERVER_BASE_URL

axios.interceptors.response.use(
  function({ data }) {
    if (data.status === 200) {
      return data.result
    }
    return response
  },
  function(error) {
    debugger
    return Promise.reject(error)
  }
)

/**
 * 对经常用到的透传方法进行了封装
 **/
Object.assign(axios, {
  /**
   * 利用原请求的querystring和cookie构建新的请求对象，也就是透传请求
   * @param {*} url 转发的url
   * @param {*} data 附加的条件，不需要携带params，直接{key:value}即可
   * @param {*} req nodejs req对象
   */
  transparentGet(url, data, ctx) {
    //如果data不传，第二个参数为ctx
    if (arguments.length === 2) {
      ctx = data
      data = null
    }
    let cookies = ctx.headers.cookie
    let query = ctx.query
    let finalQuery = Object.assign({}, data, query)
    return this.getWithCookie(url, { params: finalQuery }, cookies)
  },

  /**
   *
   * @param {*} url
   * @param {*} data 保持和axios.get最大程度的一致，data仍为{params:{}}的结构，不做改变
   * @param {*} cookieStr header中取到的完整cookie字符串
   *
   */
  getWithCookie(url, data = {}, cookieStr) {
    if (cookieStr) {
      //data有可能是null，所以不能作为第一个参数
      data = Object.assign({}, data, {
        headers: {
          Cookie: cookieStr
        }
      })
    }
    return axios.get(url, data)
  },

  /**
   * 用指定的querystring合并传入的data作为入参
   * @param {*} url
   * @param {*} data
   * @param {*} querystring
   * @deprecated
   */
  getWithQuery(url, data = {}, querystring) {
    //防止data传入null
    data || (data = {})
    let query = querystring.parse(querystring)
    Object.assign(data, query)
    return axios.get(url, data)
  },

  onResponse(response) {
    debugger
    console.log('response:', response.data)
  },
  onError(err) {
    let status = err.response && err.response.status
    console.log('接口错误，错误码：', status)
    //只报告500错误
    if (status === 500 && env.isServer) {
      // $axios.post('/mail/send', {
      //   text: `接口500错误，url：${err.config.url}，详细信息： ${JSON.stringify(
      //     err.config
      //   )}`
      // });
    }
    console.error('axios errors: ', err, route)
  }
})

module.exports = axios
